package tv.athena.live.api.videoarea

import android.graphics.Bitmap
import android.view.ViewGroup
import com.thunder.livesdk.ThunderRtcConstant
import tv.athena.live.base.arch.IComponentApi

/**
 * Created by qiushunming on 2019-08-07.
 */
interface VideoAreaComponentApi : IComponentApi {

    /**
     * 添加播放一个新的视频
     *
     * @param remoteUid     远端用户ID
     * @param viewContainer 显示视频的容器布局
     * @param renderMode 设置远端视图显示模式 目前默认是平铺模式 铺满窗口，如果比例不适应，会截取
     * @see ThunderRtcConstant.ThunderVideoViewScaleMode
     */
    fun addVideo(
            sid: String,
            remoteUid: String,
            viewContainer: ViewGroup,
            renderMode: Int = ThunderRtcConstant.ThunderVideoViewScaleMode.THUNDERVIDEOVIEW_SCALE_MODE_CLIP_TO_BOUNDS
    )

    /**
     * 设置指定的视频位处于顶级
     */
    fun setVideoZOrderOnTop(remoteUid: String, onTop: Boolean)

    /**
     * 切换远端视频渲染窗口的容器
     *
     * @param remoteUid     远端用户ID
     * @param viewContainer 显示视频的容器布局
     */
    fun switchVideoContainer(sid: String, remoteUid: String, viewContainer: ViewGroup)

    /**
     * 删除一个视频
     *
     */
    fun removeVideo(sid: String, remoteUid: String)

    /**
     * 更新编码
     * @param livePublishPlayType
     */
    fun updateVideoEncoderConfig(livePublishPlayType: LivePublishPlayType)

    /**
     * 更新设置多人连麦混流布局参数
     *
     * 布局参数中的麦位号position，来自服务器中的定义，从1开始
     *
     * @param videoPositionWrappers 视频区域信息
     * @param bgPositionWrapper     背景区域信息
     * @param bgBitmap              背景位图
     * @param viewContainer         布局的容器
     */
    fun updateMultiVideoViewLayoutParam(videoPositionWrappers: ArrayList<VideoPositionWrapper>,
                                        bgPositionWrapper: VideoPositionWrapper?,
                                        bgBitmap: Bitmap?, viewContainer: ViewGroup?)

    /**
     * 显示多人连麦中的一路流
     *
     * @param sid           频道号
     * @param remoteUid     麦位uid
     * @param seatPosition  服务端麦位号, 从1开始
     * @param renderMode 设置远端视图显示模式 目前默认是平铺模式 铺满窗口，如果比例不适应，会截取
     * @see ThunderRtcConstant.ThunderVideoViewScaleMode
     */
    fun addMultiVideo(
            sid: String,
            remoteUid: String,
            seatPosition: Int,
            renderMode: Int = ThunderRtcConstant.ThunderVideoViewScaleMode.THUNDERVIDEOVIEW_SCALE_MODE_CLIP_TO_BOUNDS)

    /**
     * 中止多人连麦中的一路流
     *
     * @param sid 频道号
     * @param remoteUid 麦位uid
     * @param seatPosition 服务端麦位号, 从1开始
     */
    fun removeMultiVideo(sid: String, remoteUid: String, seatPosition: Int)

    fun destroyView()
}
